"""
NumPy、Pandas、Matplotlib、Scikit-learn 基础案例

本案例演示了数据科学与机器学习工作流的核心库使用方法，包括：
- 数组与矩阵运算（NumPy）
- 数据处理与读写（Pandas）
- 数据可视化（Matplotlib）
- 机器学习建模与评估（Scikit-learn）
"""

# 导入NumPy库
import numpy as np

# 1. NumPy：数组与矩阵运算
# 创建一维数组
arr = np.array([1, 2, 3, 4, 5])
print("NumPy数组 arr:", arr)

# 数组运算
arr_sum = np.sum(arr)
arr_mean = np.mean(arr)
print("数组求和:", arr_sum)
print("数组均值:", arr_mean)

# 二维矩阵乘法
matrix1 = np.array([[1, 2], [3, 4]])
matrix2 = np.array([[5, 6], [7, 8]])
result = np.dot(matrix1, matrix2)
print("矩阵乘法结果:\n", result)

# 生成3x3的随机数组
random_array = np.random.rand(3, 3)
print("随机数组:\n", random_array)

# -------------------------------------
# 2. Pandas：数据处理与读写
import pandas as pd

# 创建DataFrame
data = {'Name': ['Alice', 'Bob', 'Charlie'],
        'Age': [25, 30, 35]}
df = pd.DataFrame(data)
print("\n原始DataFrame:\n", df)

# 新增均值列
df['Age_mean'] = df['Age'].mean()
print("\n添加年龄均值列后的DataFrame:\n", df)

# 条件筛选
filtered_df = df[df['Age'] > 30]
print("\n筛选年龄大于30的结果:\n", filtered_df)

# 数据写入CSV文件
df.to_csv('data.csv', index=False)

# 从CSV文件读取数据
new_df = pd.read_csv('data.csv')
print("\n从CSV读取的数据:\n", new_df)

# -------------------------------------
# 3. Matplotlib：数据可视化
import matplotlib.pyplot as plt

# 准备数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 折线图
plt.figure()
plt.plot(x, y, marker='o', linestyle='-', color='b')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Line Plot')
plt.grid(True)
plt.show()

# 柱状图
plt.figure()
plt.bar(x, y, color='orange')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Bar Plot')
plt.show()

# -------------------------------------
# 4. Scikit-learn：机器学习模型训练与评估
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42)

# 训练K近邻分类器
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)

# 预测测试集
y_pred = knn.predict(X_test)

# 模型评估（准确率）
accuracy = accuracy_score(y_test, y_pred)
print("\nKNN模型准确率:", accuracy)

# -------------------------------------
# 小结：本案例涵盖了数据科学常用库的基础用法，是学习Python数据分析和机器学习的良好起点。